import 'package:expandable_text/expandable_text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:largefriends/res/lf_double_ext.dart';
import 'package:largefriends/res/lf_string_ext.dart';

import '../../../entity/entities/chat_new_message_entity.dart';
import '../../../res/lf_color.dart';
import '../../../res/lf_fonts.dart';
import '../../../res/lf_text_style.dart';
import '../../../res/strings/lf_strings.dart';
import '../../../service/lf_auth_service.dart';
import 'LfMessageMenu.dart';

class LfMessageText extends StatelessWidget {
  final ChatNewMessageEntity data;
  final Function() recall;
  final Function() report;
  final Function() reply;
  final bool canShowMenu;
  final bool isSupport;
  const LfMessageText({
    Key? key,
    required this.data,
    required this.recall,
    required this.report,
    required this.reply,
    required this.canShowMenu,
    required this.isSupport,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    LfAuthService authService = Get.find();
    var isSender =
        data.sender?.profile?.userId == authService.currentAccount!.userId;
    var text = isSupport
        ? Text(data.message ?? "",
            style: lfTextStyle(
                sp: 15.sp,
                fontFamily: fontRegular,
                color: isSender ? colorFEFEFE : colorFEFEFE))
        : ExpandableText(data.message?.replaceBreak.replaceWord(isSender) ?? "",
            expandText: '${strMore.tr}>>',
            collapseText: '<<${strLess.tr}',
            expandOnTextTap: true,
            animation: true,
            collapseOnTextTap: false,
            linkColor: color000000,
            linkEllipsis: false,
            maxLines: 6,
            // position:
            style: lfTextStyle(
                sp: 15.sp,
                fontFamily: fontRegular,
                color: isSender ? colorFEFEFE : colorFEFEFE));
    if (isSender) {
      return Row(
        mainAxisAlignment: MainAxisAlignment.end,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Flexible(
              child: getMenuWidget(
                  data: data,
                  child: Container(
                    padding:
                        EdgeInsets.symmetric(horizontal: 10.r, vertical: 8.h),
                    decoration: BoxDecoration(
                      color: color514F62,
                      borderRadius: BorderRadius.only(
                          topLeft: Radius.circular(10.r),
                          bottomRight: Radius.circular(10.r),
                          bottomLeft: Radius.circular(10.r)),
                    ),
                    constraints: BoxConstraints(
                      maxWidth: ScreenUtil().screenWidth - 70.w,
                    ),
                    child: text,
                  ),
                  recall: () {
                    recall.call();
                  },
                  report: () {
                    report.call();
                  },
                  reply: () {
                    reply.call();
                  },
                  canShowMenu: canShowMenu,
                  isTextMessage: true,
                  isSender: isSender)),
          10.w.sbw
        ],
      );
    } else {
      return Row(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          10.w.sbw,
          Flexible(
              child: getMenuWidget(
                  data: data,
                  child: Container(
                    decoration: BoxDecoration(
                      color: color8F8F8F,
                      borderRadius: BorderRadius.only(
                          topRight: Radius.circular(10.r),
                          bottomRight: Radius.circular(10.r),
                          bottomLeft: Radius.circular(10.r)),
                    ),
                    padding:
                        EdgeInsets.symmetric(horizontal: 10.r, vertical: 8.h),
                    constraints: BoxConstraints(
                        maxWidth: ScreenUtil().screenWidth - 70.w,
                        minHeight: 42.h),
                    child: text,
                  ),
                  recall: () {
                    recall.call();
                  },
                  report: () {
                    report.call();
                  },
                  reply: () {
                    reply.call();
                  },
                  canShowMenu: canShowMenu,
                  isTextMessage: true,
                  isSender: isSender)),
          10.w.sbw
        ],
      );
    }
  }
}
